package com.beiding.jsonanalyzer.analyze.func.base;

import com.beiding.jsonanalyzer.analyze.func.FuncBase;
import com.beiding.jsonanalyzer.flow.ValueNode;

/**
 * 简单处理函数
 */
public abstract class EasyFunc implements FuncBase {

    /**
     * 内核处理
     */
    protected FuncBase core;

    /**
     * 设置内核函数
     * @param core
     */
    public void config(FuncBase core) {
        this.core = core;
    }

    @Override
    public boolean checkAgg() {
        //自身没有聚合性
        return core.checkAgg();
    }


    @Override
    public Object executeOne(ValueNode valueNode) {
        Object put = core.executeOne(valueNode);
        return execute(put);
    }

    @Override
    public void pugAgg(ValueNode valueNode) {
        core.pugAgg(valueNode);
    }

    @Override
    public void resetAgg() {
        core.resetAgg();
    }

    @Override
    public Object aggGet() {
        return execute(core.aggGet());
    }


    /**
     * 无论是对单个执行而言,还是对聚合的结果而言.
     * 处理逻辑都是一样的. 都是将最终结果聚合成一个
     * @param v
     * @return
     */
    protected abstract Object execute(Object v);

}
